package org.example.serializable;

import java.io.*;

/**
 * {@code @BelongsProject:}xkLab
 * {@code @BelongsPackage:}org.example.serializable
 * {@code @Author:} Xukai
 * {@code @CreateTime:}2025-07-08  10:00
 * {@code @Description:}序列化和反序列化的示例
 * {@code @Version:}1.0
 */

// 第一步：实现Serializable接口（空接口）
class User implements Serializable {
    // 第二步：添加版本号
    private static final long serialVersionUID = 1L;

    private String name;
    private transient String password; // transient不参与序列化

    // 添加构造函数
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    // 添加getter方法
    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }
}

public class Demo {
    public static void main(String[] args) {
        // 第三步：序列化对象
        try (ObjectOutputStream out = new ObjectOutputStream(
                new FileOutputStream("SerializableOutput.txt"))) {
            out.writeObject(new User("张三", "123456"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 第四步：反序列化
        try (ObjectInputStream in = new ObjectInputStream(
                new FileInputStream("SerializableOutput.txt"))) {
            User user = (User) in.readObject();
            System.out.println(user.getName()); // 输出"张三"
            System.out.println(user.getPassword()); // 输出null（因为transient）
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
